<!-- 为了优化支持所有文件类型的上传，您可以考虑以下几点对现有代码进行调整：

更新 limitType 属性： 将 limitType 属性改为包含所有允许的文件类型（如常见的图片、文档、音频、视频等）。例如： -->
limitType: {
     type: Array,
     default() {
       return [
         "png",
         "jpg",
         "jpeg",
         "webp",
         "gif",
         "image",
         "pdf",
         "doc",
         "docx",
         "xls",
         "xlsx",
         "ppt",
         "pptx",
         "txt",
         "csv",
         "mp3",
         "wav",
         "aac",
         "mp4",
         "avi",
         "mov",
         // 添加更多允许的文件类型...
       ];
     },
   },
   <!-- 更新文件选择逻辑： 调整 selectFile 方法中使用的 uni.chooseImage API 为 uni.chooseFile，以支持选择所有类型的文件。修改如下： -->
      // 选择图片
   selectFile() {
     if (this.disabled) return;
     const {
       name = "",
       maxCount,
       multiple,
       maxSize,
       sizeType,
       lists,
       camera,
       compressed,
       maxDuration,
       sourceType,
     } = this;

     // 使用 uni.chooseFile 替换 uni.chooseImage
     let chooseFile = null;
     const newMaxCount = maxCount - lists.length;
     chooseFile = new Promise((resolve, reject) => {
       uni.chooseFile({
         count: multiple ? (newMaxCount > 9 ? 9 : newMaxCount) : 1,
         sourceType: sourceType,
         sizeType,
         success: resolve,
         fail: reject,
       });
     });

     // ...（保持其余部分不变）
   }
   <!-- 更新 checkFileExt 方法： 由于现在支持多种文件类型，需要在 checkFileExt 方法中处理非图片文件的预览逻辑。对于非图片文件，可以使用通用的文件图标替代预览图，并提供合适的文件类型提示。例如： -->
      <!-- 在模板中添加一个通用文件图标 -->
   <u-icon v-if="!item.isImage" class="u-preview-file-icon" :name="'file'"></u-icon>
   <text v-if="!item.isImage" class="u-preview-file-type">{{ item.fileExt }}</text>

   <!-- 更新样式，为非图片文件添加合适的样式 -->
   <style scoped>
     .u-preview-file-icon {
       /* 根据需要添加通用文件图标的样式 */
     }
     .u-preview-file-type {
       /* 根据需要添加文件类型文本的样式 */
     }
   </style>
   <!-- 更新 checkFileExt 方法以处理文件类型提示和预览逻辑： -->
      // 判断文件后缀是否允许
   checkFileExt(file) {
     // ...（保持原有逻辑）

     // 获取后缀名
     let fileExt = "";
     // ...（保持原有逻辑）

     // 添加非图片文件的预览处理
     if (!this.limitType.some((ext) => ext.toLowerCase() === fileExt)) {
       this.showToast(`不允许选择${fileExt}格式的文件`);
       return false;
     }

     // 更新列表项的 isImage 属性
     const isImage = ["png", "jpg", "jpeg", "webp", "gif", "image"].includes(
       fileExt.toLowerCase()
     );
     this.lists[index].isImage = isImage;

     // 添加文件扩展名到列表项
     this.lists[index].fileExt = fileExt;

     return true;
   }

   <!-- 更新预览逻辑： 修改 doPreviewImage 方法，为非图片文件提供适当的预览方式，如打开新页面查看或下载文件。这里以打开新页面查看为例： -->
      // 预览文件
   doPreviewFile(url, index) {
     if (this.lists[index].isImage) {
       this.doPreviewImage(url, index);
     } else {
       // 打开新页面查看文件
       uni.openUrl({
         url,
         success: () => {
           this.$emit("on-preview", url, this.lists, this.index);
         },
         fail: () => {
           uni.showToast({
             title: "预览文件失败",
             icon: "none",
           });
         },
       });
     }
   },
   然后在模板中，将 @tap.stop="doPreviewImage(item.url || item.path, index)" 改为 @tap.stop="doPreviewFile(item.url || item.path, index)"。

通过以上调整，您的上传组件应该能够更好地支持所有类型的文件上传，并根据文件类型提供相应的预览和处理方式。记得根据实际需求调整样式和预览逻辑